package com.czie.myapplication;

public class ByteIntConvertor {
    //offset用来表示数组中的索引
    public static int bytesToShort(byte[] b, int offset) {
        //向左移8位接收前四个字节
        int a = ((b[offset + 1] << 8) & 0xff00) + (b[offset]);
        return a;
    }

    //offset用来表示数组中的索引
    public static int bytesToShort1(byte[] b, int offset) {
        //向左移8位接收前四个字节
        int a = ((b[offset] << 8) & 0xff00) + (b[offset + 1]);
        return a;
    }


    /**
     * 将网络字节序的byte数组转成一个int
     *
     * @param b
     * @param offset
     * @return
     */
    public static int bytesToInt(byte[] b, int offset) {
        int a = ((b[offset] << 24) & 0xff000000) + ((b[offset + 1] << 16) & 0x00ff0000) + ((b[offset + 2] << 8) & 0x0000ff00) + (b[offset + 3]);
        return a;
    }

    /**
     * 将主机字节序的byte数组转成一个int
     *
     * @param b
     * @param offset
     * @return
     */
    public static int bytesHostToInt(byte[] b, int offset) {
        int a = ((b[offset]) & 0x000000ff) + ((b[offset + 1] << 8) & 0x0000ff00) + ((b[offset + 2] << 16) & 0x00ff0000) + ((b[offset + 3] << 24) & 0xff000000);
        return a;
    }

    /**
     * 将一个整数转成网络字节的byte数组，放在offset位置
     *
     * @param val    需要转换的整数
     * @param b      转成的字节放在b数组中
     * @param offset 从offset位置开始存放
     */
    public static void intToBytes(int val, byte[] b, int offset) {
        //网络字节序：整数的低位放在高地址，高位放在低地址
        b[offset + 3] = (byte) (val & 0xff);
        b[offset + 2] = (byte) ((val >> 8) & 0xff);
        b[offset + 1] = (byte) ((val >> 16) & 0xff);
        b[offset + 0] = (byte) ((val >>> 24) & 0xff);
    }
}
